/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package bpel2rep.version;

import java.io.Serializable;

import org.eclipse.emf.ecore.EObject;

import bpel2rep.exception.UnknownStateNameException;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Version</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link bpel2rep.version.Version#getVersionState <em>Version State</em>}</li>
 *   <li>{@link bpel2rep.version.Version#getMetaInfo <em>Meta Info</em>}</li>
 *   <li>{@link bpel2rep.version.Version#getProcess <em>Process</em>}</li>
 *   <li>{@link bpel2rep.version.Version#getPredecessor <em>Predecessor</em>}</li>
 *   <li>{@link bpel2rep.version.Version#getVersionId <em>Version Id</em>}</li>
 *   <li>{@link bpel2rep.version.Version#getStateName <em>State Name</em>}</li>
 * </ul>
 * </p>
 *
 * @see bpel2rep.version.VersionPackage#getVersion()
 * @model
 * @generated
 */
public interface Version extends EObject {
	/**
	 * Returns the value of the '<em><b>Version State</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Version State</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Version State</em>' containment reference.
	 * @see #setVersionState(VersionState)
	 * @see bpel2rep.version.VersionPackage#getVersion_VersionState()
	 * @model containment="true" required="true" transient="true"
	 * @generated
	 */
	
	VersionState getVersionState();

	/**
	 * Sets the value of the '{@link bpel2rep.version.Version#getVersionState <em>Version State</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Version State</em>' containment reference.
	 * @see #getVersionState()
	 * @generated
	 */
	void setVersionState(VersionState value);

	/**
	 * Returns the value of the '<em><b>Meta Info</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Meta Info</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Meta Info</em>' containment reference.
	 * @see #setMetaInfo(MetaInfo)
	 * @see bpel2rep.version.VersionPackage#getVersion_MetaInfo()
	 * @model containment="true" required="true"
	 * @generated
	 */
	MetaInfo getMetaInfo();

	/**
	 * Sets the value of the '{@link bpel2rep.version.Version#getMetaInfo <em>Meta Info</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Meta Info</em>' containment reference.
	 * @see #getMetaInfo()
	 * @generated
	 */
	void setMetaInfo(MetaInfo value);

	/**
	 * Returns the value of the '<em><b>Process</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Process</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Process</em>' containment reference.
	 * @see #setProcess(bpel2rep.process.Process)
	 * @see bpel2rep.version.VersionPackage#getVersion_Process()
	 * @model containment="true" required="true"
	 * @generated
	 */
	bpel2rep.process.Process getProcess();

	/**
	 * Sets the value of the '{@link bpel2rep.version.Version#getProcess <em>Process</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Process</em>' containment reference.
	 * @see #getProcess()
	 * @generated
	 */
	void setProcess(bpel2rep.process.Process value);

	/**
	 * Returns the value of the '<em><b>Predecessor</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Predecessor</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Predecessor</em>' containment reference.
	 * @see #setPredecessor(VersionId)
	 * @see bpel2rep.version.VersionPackage#getVersion_Predecessor()
	 * @model containment="true" required="true"
	 * @generated
	 */
	VersionId getPredecessor();

	/**
	 * Sets the value of the '{@link bpel2rep.version.Version#getPredecessor <em>Predecessor</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Predecessor</em>' containment reference.
	 * @see #getPredecessor()
	 * @generated
	 */
	void setPredecessor(VersionId value);

	/**
	 * Returns the value of the '<em><b>Version Id</b></em>' containment reference.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Version Id</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Version Id</em>' containment reference.
	 * @see #setVersionId(VersionId)
	 * @see bpel2rep.version.VersionPackage#getVersion_VersionId()
	 * @model containment="true" required="true"
	 * @generated
	 */
	VersionId getVersionId();

	/**
	 * Sets the value of the '{@link bpel2rep.version.Version#getVersionId <em>Version Id</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Version Id</em>' containment reference.
	 * @see #getVersionId()
	 * @generated
	 */
	void setVersionId(VersionId value);

	/**
	 * Returns the value of the '<em><b>State Name</b></em>' attribute.
	 * The default value is <code>""</code>.
	 * The literals are from the enumeration {@link bpel2rep.version.StateName}.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>State Name</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>State Name</em>' attribute.
	 * @see bpel2rep.version.StateName
	 * @see #setStateName(StateName)
	 * @see bpel2rep.version.VersionPackage#getVersion_StateName()
	 * @model default=""
	 * @generated
	 */
	StateName getStateName();

	/**
	 * Sets the value of the '{@link bpel2rep.version.Version#getStateName <em>State Name</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>State Name</em>' attribute.
	 * @throws UnknownStateNameException 
	 * @see bpel2rep.version.StateName
	 * @see #getStateName()
	 * @generated NOT
	 */
	void setStateName(StateName value) throws UnknownStateNameException;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void checkin(Version version, boolean isMajor, WorkingStatus status);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	Version checkout(String processId, VersionId versionId, WorkingStatus status);

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void checkoutuse();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void endSimuleSession();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void startSimuleSession();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void lockUse();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void lockWork();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void lockSimule();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void unlockSimule();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void unlockUse();

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @model
	 * @generated
	 */
	void unlockWork();
	
	public VersionState getInitialState();
	public VersionState getFreeState();
	public VersionState getLockWorkState();
	public VersionState getSimuleSessionState();
	public VersionStore getVersionStore();

} // Version
